package com.learn.hibernatevalidator.chapter02.addtionalconstraints;

import lombok.Data;
import org.hibernate.validator.constraints.*;
import org.hibernate.validator.constraints.time.DurationMax;
import org.hibernate.validator.constraints.time.DurationMin;

import java.text.Normalizer;
import java.time.Duration;
import java.util.List;

/**
 * @author: liyf
 * @create: 2024-12-22 16:39
 **/
@Data
public class DataInfo {


    /**
     * | `@CreditCardNumber` | 信用卡号检查 | 字段、方法参数 | CharSequence                                                                                                    | -     |
     * | `@Currency`                 | 货币单位   | 字段、方法参数 | MonetaryAmount                                                                                                  | -     |
     * | `@DurationMax`                 | 持续时间   | 字段、方法参数 | Duration                                                                                                        | -     |
     * | `@DurationMin`                 | 持续时间   | 字段、方法参数 | Duration                                                                                                        | -     |
     * | `@EAN`                 | 条码     | 字段、方法参数 | CharSequence                                                                                                    | -     |
     * | `@ISBN`                 | 图书     | 字段、方法参数 | CharSequence                                                                                                    | -     |
     * | `@Length(min=, max=)`                 | 字符串长度  | 字段、方法参数 | CharSequence                                                                                                    | -     |
     * | `@CodePointLength`                 |    码位长度    | 字段、方法参数 | CharSequence                                                                                                    | -     |
     * | `@LuhnCheck`                 |  Luhn 校验和算法       | 字段、方法参数 | CharSequence                                                                                                    | -     |
     * | `@Mod10Check`                 |   mod 10 校验和算法     | 字段、方法参数 | CharSequence                                                                                                    | -     |
     * | `@Normalized`                 |   字符序列是否根据给定的形式进行了规范化     | 字段、方法参数 | CharSequence                                                                                                    | -     |
     * | `@Range`                 |   值是否介于（含）指定的最小值和最大值之间     | 字段、方法参数 | BigDecimal, BigInteger, CharSequence, byte, short, int, long and the respective wrappers of the primitive types | -     |
     * | `@ScriptAssert`                 | 否可以根据带注释的元素成功评估给定的脚本       | 类      | 所有类型                                                                                                            | -     |
     * | `@UniqueElements`                 |  检查带注释的集合是否仅包含唯一元素。相等性是使用 equals（） 方法确定的。      | 字段、方法参数 |       Collection                                                                                                            | -     |
     * | `@URL`                 |   检查带注释的字符序列是否为有效 URL     | 字段、方法参数 |      CharSequence                                                                                                             | -     |
     * | `@UUID`                 |      UUID  | 字段、方法参数 | CharSequence                                                                                                                | -     |
     */

    @DurationMin(minutes = 1)
    private Duration minDuration;

    @DurationMax(minutes = 1)
    private Duration maxDuration;

    @ISBN
    private String isbn;

    @Length(min = 2, max = 5)
    private String strLength;

    @Normalized(form = Normalizer.Form.NFKD)
    private String normalized;

    @Range(min = 0, max = 100)
    private int range;

    @UniqueElements
    private List<String> list;

    @UniqueElements
    private List<Person> persons;

    @URL
    private String url;

    @URL(protocol = "https")
    private String httpsUrl;

    @URL(protocol = "ftp")
    private String ftpUrl;

    @UUID
    private String uuid;
}

